#ifndef __GfxDriver_Texture_h__
#define __GfxDriver_Texture_h__

#include "Core/BasicTypes.h"
#include "GfxDriver/PixelFormat.h"

namespace Orca {

	//--------------------------------------------------------------------------
	class Texture {

	public:
		virtual ~Texture() {}

		virtual unsigned int getAPIHandle() const = 0;
		virtual unsigned int getAPITexType() const = 0;

		virtual bool uploadToGPU(bool autoGenMipmap) = 0;
	};

	//--------------------------------------------------------------------------
	class Texture2d : public Texture {

	public:
		virtual ~Texture2d() {}

		virtual uint32 getWidth() const = 0;
		virtual uint32 getHeight() const = 0;
		virtual PixelFormat getPixelFormat() const = 0;

		virtual void* requestUpload() = 0;
	};

	//--------------------------------------------------------------------------
	class TextureCube : public Texture {

	public:
		virtual ~TextureCube() {}

		virtual uint32 getSize() const = 0;
		virtual PixelFormat getPixelFormat() const = 0;

		virtual void* requestUpload(CubeMapSide side) = 0;
	};

	//--------------------------------------------------------------------------
	class TextureRendered : public Texture {

	public:
		virtual ~TextureRendered() {}

		virtual uint32 getWidth() const = 0;
		virtual uint32 getHeight() const = 0;
		virtual PixelFormat getPixelFormat() const = 0;
	};

	//--------------------------------------------------------------------------
	class IDepthTexture : public Texture {

	public:
		virtual ~IDepthTexture() {}

		virtual uint32 getWidth() const = 0;
		virtual uint32 getHeight() const = 0;
		virtual PixelFormat getPixelFormat() const = 0;
	};
}

#endif	// __GfxDriver_Texture_h__